package com.itheima.d3_final;

/**
 * - final修饰类：该类称为最终类，特点是不能被继承
 * - final修饰方法：该方法称之为最终方法，特点是不能被重写。
 * - final修饰变量：该变量只能被赋值一次。
 *
 * final修饰变量的注意
 * final修饰基本类型的变量，变量存储的数据不能被改变。
 * final修饰引用类型的变量，变量存储的地址不能被改变，但地址所指向对象的内容是可以被改变的。
 */
public class Test {
    /**
     * 常量： public static final修饰的成员变量，建议名称全部大写，多个单词下划线连接
     * 静态成员变量
     */
    public static final String SCHOOL_NAME = "黑马";
    private final String name = "猪八戒"; // 这种用法没有意义，知道就行 :实例成员变量

    public static void main(String[] args) {
        // 目标：认识final的作用。
        // 3、final可以修饰变量总规则：有且仅能赋值一次
        /* 变量：
            一，局部变量
            二，成员变量
                1、静态成员变量
                2、实例成员变量
        */
        System.out.println(SCHOOL_NAME);
        final int a;  //局部变量
        a = 12;
        // a = 13; // 第二次赋值，出错了

        final double r = 3.14;
        // r = 0.1; // 第二次赋值，出错了

        /**
         * final修饰引用类型的变量，变量存储的地址不能被改变，但地址所指向对象的内容是可以被改变的。
         */
        final int[] arr = {11, 22, 33};
        // arr = null; // 第二次赋值，出错了
        arr[1] = 222;
        arr[0]=77;

        // schoolName = "白马"; // 第二次赋值，出错了
        Test t = new Test();
        System.out.println(Test.SCHOOL_NAME);
        // t.name = "孙悟空";// 第二次赋值，出错了
    }

    public static void buy(final double z){
        // z = 0.1;// 第二次赋值，出错了
    }
}

            // 1、final修饰类，类不能被继承了
final class A{}
//class B extends A{}


            // 2、final修饰方法，方法不能被重写了
class C{
    public final void test(){
    }
}
class D extends C{
  /*  @Override
    public void test() {

    }*/
}
